from flask import Blueprint, request, jsonify
import requests
from flask import current_app

# 创建新闻蓝图
news_bp = Blueprint('news', __name__, url_prefix='/api/news')

@news_bp.route('/list', methods=['GET'])
def get_news_list():
    """获取新闻列表（对接聚合数据API）"""
    # 新增：终端访问提示
    print("="*50)
    print(f"收到新闻列表请求：{request.url}")
    print(f"请求参数：{request.args}")
    print("="*50)
    
    try:
        # 获取请求参数（默认值处理）
        news_type = request.args.get('type', 'cultural_architecture')  # 可改为适合文化资讯的分类
        page = request.args.get('page', '1')
        page_size = request.args.get('page_size', '10')  # 减少默认数量，提高加载速度
        
        # 从配置获取API密钥
        juhe_key = current_app.config['JUHE_KEY']
        if not juhe_key:
            return jsonify({"code": -1, "msg": "聚合数据API密钥未配置"})
        
        # 调用聚合数据API
        url = "http://v.juhe.cn/toutiao/index"
        params = {
            "key": juhe_key,
            "type": news_type,
            "page": page,
            "page_size": page_size
        }
        
        response = requests.get(url, params=params, timeout=10)
        res_data = response.json()
        
        # 适配前端数据格式（聚合数据返回格式可能为：{error_code, reason, result: {data: [...]}}）
        if res_data.get("error_code") == 0 and res_data.get("result"):
            # 映射字段（前端需要imageUrl、title、publishTime）
            formatted_news = []
            for item in res_data["result"]["data"]:
                formatted_news.append({
                    "id": item.get("uniquekey"),  # 用uniquekey作为新闻ID
                    "title": item.get("title"),
                    "imageUrl": item.get("thumbnail_pic_s") or item.get("thumbnail_pic_s02") or "",  # 优先取第一张图
                    "publishTime": item.get("date"),
                    "source": item.get("author_name")
                })
            return jsonify({
                "code": 0,
                "msg": "获取成功",
                "data": formatted_news
            })
        else:
            return jsonify({
                "code": -1,
                "msg": f"聚合数据错误：{res_data.get('reason', '未知错误')}"
            })
    except Exception as e:
        current_app.logger.error(f"新闻列表接口错误：{str(e)}")
        return jsonify({"code": -1, "msg": "服务器内部错误"})

@news_bp.route('/detail', methods=['GET'])
def get_news_detail():
    """获取新闻详情（适配前端格式）"""
    # 新增：终端访问提示
    print("="*50)
    print(f"收到新闻详情请求：{request.url}")
    print(f"请求参数：{request.args}")
    print("="*50)
    
    try:
        uniquekey = request.args.get('uniquekey')
        if not uniquekey:
            return jsonify({"code": -1, "msg": "缺少uniquekey参数"})
        
        juhe_key = current_app.config['JUHE_KEY']
        url = "http://v.juhe.cn/toutiao/content"
        params = {
            "key": juhe_key,
            "uniquekey": uniquekey
        }
        
        response = requests.get(url, params=params, timeout=10)
        res_data = response.json()
        
        if res_data.get("error_code") == 0 and res_data.get("result"):
            raw_data = res_data["result"]
            
            # 转换content为前端需要的数组格式
            # （假设聚合数据返回的content是HTML，这里简单处理为文本+图片分离）
            content = []
            # 1. 先添加文本内容（如果有）
            if raw_data.get("content"):
                content.append({
                    "type": "text",
                    "value": raw_data["content"]  # 若为HTML，可简单清洗标签
                })
            # 2. 再添加图片（如果有）
            if raw_data.get("img_url"):  # 假设聚合数据用img_url存储图片
                content.append({
                    "type": "img",
                    "value": raw_data["img_url"]
                })
            
            # 适配前端字段
            formatted_data = {
                "title": raw_data.get("title", ""),
                "author_name": raw_data.get("author_name", "未知来源"),  # 确保字段名匹配
                "date": raw_data.get("date", ""),
                "content": content  # 转换后的内容数组
            }
            
            return jsonify({
                "code": 0,
                "msg": "获取成功",
                "data": formatted_data  # 返回转换后的数据
            })
        else:
            return jsonify({
                "code": -1,
                "msg": f"聚合数据错误：{res_data.get('reason', '未知错误')}"
            })
    except Exception as e:
        current_app.logger.error(f"新闻详情接口错误：{str(e)}")
        return jsonify({"code": -1, "msg": "服务器内部错误"})